#include "SymboleValue.h"
#include <stdlib.h>

////////////////////////////////////////////////////////////////////////////////
SymboleValue::SymboleValue(Symbole s) :
	Symbole(s.getChaine()) {
	if (s == "<ENTIER>") {
		valeur = atoi(s.getChaine().c_str()); // c_str convertit une string en char*
		defini = true;
        }
     
        else {
		valeur = 0;
		defini = false;
	}
}

////////////////////////////////////////////////////////////////////////////////
void SymboleValue::afficher(short unsigned int indentation) {
	Noeud::afficher(indentation);
	cout << "Feuille - Symbole value : " << getChaine() << endl; // on affiche la chaine du symbole
}
////////////////////////////////////////////////////////////////////////////////
void SymboleValue::tradC(short unsigned int  indentation) {

	cout << getChaine(); // on affiche la chaine du symbole
}
////////////////////////////////////////////////////////////////////////////////
int SymboleValue::getValeur() {
    if (this->isChaine(this->getChaine())) { //verification qu'il ne s'agit pas d'une chaine
        cout <<this->getEnChaine() << "\n"; //renvoie de la chaine sans les guillemets
    }
    else return valeur;
    return 0;
}
////////////////////////////////////////////////////////////////////////////////
string SymboleValue::getEnChaine() {
    string mod = this->getChaine();
    mod.erase(mod.begin());
    mod.erase(mod.end()-1);
    return mod;
    
}
////////////////////////////////////////////////////////////////////////////////
// Attention : cette fonction (operator) n'est pas membre de la classe SymboleValue
ostream & operator <<(ostream & cout, SymboleValue symb) {
	cout << (Symbole) symb << "\t\t - Valeur=";
	if (symb.defini)
		cout << symb.valeur << " ";
	else
		cout << "indefinie ";
	return cout;
}
